package com.aqie.easy.design;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 225 用队列实现栈
 * 队列 ：队尾入 队首出，push pop peek size isEmpty
 *
 * 新元素从 q2入队，并作为栈顶元素,
 * q1非空则栈非空
 * q1元素全部出队，再将出队元素从q2入队
 */
public class MyStack {
    private Queue<Integer> q1 = new LinkedList<>();
    private Queue<Integer> q2 = new LinkedList<>();
    private int top;

    /** Initialize your data structure here. */
    public MyStack() {

    }

    /** Push element x onto stack. */
    public void push(int x) {
        q2.add(x);
        top = x;
        while (!q1.isEmpty()){
            q2.add(q1.remove());
        }
        // q1 q2 相互交换
        Queue<Integer> tmp = q1;
        q1 = q2;
        q2 = tmp;
    }

    /** Removes the element on top of the stack and returns that element. */
    public int pop() {
        Integer remove = q1.remove();
        if (!q1.isEmpty()) top = q1.peek();
        return remove;
    }

    /** Get the top element. */
    public int top() {
        return top;
    }

    /** Returns whether the stack is empty. */
    public boolean empty() {
        return q1.isEmpty();
    }
}
